
import axios from 'axios'
// 引入 node中自带的qs模块（数据格式转换）
import { Message } from 'element-ui'
// 这里要export vue实例对象，才能引用
// import context from '../main.js'

/* 2.全局默认配置 */
let baseURL
// 判断开发环境（一般用于本地代理）
if (process.env.NODE_ENV === 'development') { // 开发环境
  // baseURL = '/sso/sys/v1' // 你设置的本地代理请求（跨域代理），下文会详细介绍怎么进行跨域代理
} else { // 编译环境
  if (process.env.type === 'test') { // 测试环境
    baseURL = ''
  } else { // 正式环境
    baseURL = ''
  }
}
// 方法一
// 配置axios的属性
// axios.defaults.timeout = 6000;    // 请求超时时间1分钟
// axios.defaults.baseURL =baseURL; // 你的接口地址
// axios.defaults.responseType="json";
// axios.defaults.withCredentials=false; //是否允许带cookie这些

/*
方法二   下面使用这种方式
创建axios实例进行配置，
*/
const Axios = axios.create({
  baseURL: baseURL, // 后台服务地址
  timeout: 60000, // 请求超时时间1分钟
  responseType: 'json',
  withCredentials: false // 是否允许带cookie这些
})

/* 3.设置拦截器 */
Axios.interceptors.request.use((config) => {
  config.headers['Authorization'] = window.sessionStorage.getItem('token')
  // config.headers['Authorization'] = context.$store.auth.token
  /*
    数据转换: axios post方式默认是json格式提交数据，如果使用application/x-www-form-urlencoded数据格式提交，
    要用qs.stringify()进行转换,个人建议不在拦截器中全局配置，因为不够灵活，还有一点是，如果
    设置了重新请求的配置，那么重新请求时，请求体中的config里面的传参就会被再次进行qs.stringify()转
    换，会使得参数丢失，造成请求失败。
  */
  // config.data = qs.stringify(config.data)
  return config
}, (error) => {
  return Promise.reject(error)
})

// 这里需要根据业务响应更改，
Axios.interceptors.response.use((res) => {
  if (res.config.direct) {
    return res.data
  }
  return Promise.resolve(res)
}, (error) => {
  Message.error(error.response.data.error.message)
  return Promise.reject(error)
})

export default Axios
